package com.mgy.db.dao.mapper.not;

import com.mgy.db.TableRouter;
import com.mgy.db.common.domain.Notepad;
import com.mgy.db.common.query.NotepadQuery;
import com.mgy.db.sharding.annotation.MybatisMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * (Notepad)表数据库访问层
 *
 * @author maguoyong
 * @since 2020-01-29 12:03:48
 */
@Repository("notNotepadMapper")
@MybatisMapper("notepad")
public interface NotepadMapper {
    /**
     * 通过ID查询单条数据
     *
     * @param id          主键
     * @param tableRouter 分库对象
     * @return 实例对象
     */
    Notepad queryById(@Param("id") Integer id, TableRouter tableRouter);

    /**
     * 通过userId查询单条数据
     *
     * @param userId      主键
     * @param tableRouter 分库对象
     * @return 实例对象
     */
    List<Notepad> queryByUserId(@Param("userId") Integer userId, TableRouter tableRouter);

    /**
     * 通过主键删除数据
     *
     * @param id          主键
     * @param tableRouter 分库对象
     * @return 影响行数
     */
    Integer deleteById(@Param("id") Integer id, TableRouter tableRouter);

    /**
     * 新增数据（实体对象带分库分表信息）
     *
     * @param notepad 实例对象
     * @return 影响行数
     */
    Long insert(@Param("obj") Notepad notepad);

    /**
     * 新增数据（实体对象不带分库分表信息，TableRouter带分库分表信息）
     *
     * @param notepad     实例对象
     * @param tableRouter 分库对象
     * @return 影响行数
     */
    Long insert(@Param("obj") Notepad notepad, TableRouter tableRouter);

    /**
     * 新增数据（实体对象带分库分表信息）
     *
     * @param notepad 实例对象
     * @return 影响行数
     */
    void insert1(@Param("obj") Notepad notepad);

    /**
     * 新增数据（实体对象不带分库分表信息，TableRouter带分库分表信息）
     *
     * @param notepad     实例对象
     * @param tableRouter 分库对象
     * @return 影响行数
     */
    void insert1(@Param("obj") Notepad notepad, TableRouter tableRouter);


    /**
     * 新增数据（实体对象带分库分表信息）
     *
     * @param notepad 实例对象
     * @return 影响行数
     */
    Long insert2(@Param("obj") Notepad notepad);

    /**
     * 新增数据（实体对象不带分库分表信息，TableRouter带分库分表信息）
     *
     * @param notepad     实例对象
     * @param tableRouter 分库对象
     * @return 影响行数
     */
    Long insert2(@Param("obj") Notepad notepad, TableRouter tableRouter);

    /**
     * 新增数据（实体对象带分库分表信息）
     *
     * @param notepad 实例对象
     * @return 影响行数
     */
    void insert22(@Param("obj") Notepad notepad);

    /**
     * 新增数据（实体对象不带分库分表信息，TableRouter带分库分表信息）
     *
     * @param notepad     实例对象
     * @param tableRouter 分库对象
     * @return 影响行数
     */
    void insert22(@Param("obj") Notepad notepad, TableRouter tableRouter);


    /**
     * 修改数据
     *
     * @return 影响行数
     */
    void batchInsert(@Param("list") List<Notepad> list, TableRouter tableRouter);

    /**
     * 修改数据
     *
     * @param notepad 实例对象
     * @return 影响行数
     */
    Integer update(@Param("obj") Notepad notepad);

    /**
     * 修改数据
     *
     * @param notepad 实例对象
     * @return 影响行数
     */
    Integer update(@Param("obj") Notepad notepad, TableRouter tableRouter);

    /**
     * 分页查询列表
     *
     * @param notepadQuery 实例对象
     * @return 对象列表
     */
    List<Notepad> getNotepadListWithPage(@Param("obj") NotepadQuery notepadQuery);

    /**
     * 分页查询列表
     *
     * @param notepadQuery 实例对象
     * @return 对象列表
     */
    List<Notepad> getNotepadListWithPage(@Param("obj") NotepadQuery notepadQuery, TableRouter tableRouter);

    /**
     * 分页查询列表
     *
     * @param notepadQuery 实例对象
     * @return 对象列表
     */
    List<Notepad> getNotepadList(@Param("obj") NotepadQuery notepadQuery);


    /**
     * 分页查询列表
     *
     * @param notepadQuery 实例对象
     * @return 数量
     */
    Long getNotepadListCount(@Param("obj") NotepadQuery notepadQuery);

    /**
     * 分页查询列表
     *
     * @param notepadQuery 实例对象
     * @return 数量
     */
    Long getNotepadListCount(@Param("obj") NotepadQuery notepadQuery, TableRouter tableRouter);
}